#include <iostream>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h> // 注意：原代码中使用了sleep函数，需包含此头文件
#include <wait.h>


void handler(int signo)
{
    std::cout << "get a sig: " << signo << std::endl;
    pid_t rid = ::waitpid(-1,nullptr,0);
    if(rid > 0)
    {
        std::cout << "子进程退出了,回收成功,child id: " << rid << std::endl;
    }
}

int main()
{
    signal(SIGCHLD,handler);
    for(int i = 0;i < 10; i++)
    {
        if(fork() == 0)
        {
            sleep(5);
            std::cout << "子进程退出" << std::endl;
            exit(0);
        }
    }
    
    while(true)
    {
        sleep(1);
    }
    return 0;
}